from scipy import stats
import pandas as pd

# 判断表单3中的每一个风化样本与表单2中的风化样本的成分含量相似性
def get_similarity():
    # 读取数据
    candidates_df = pd.read_excel(r'./data/表单3/表单2中风化采样点成分含量.xlsx')
    testers_df = pd.read_excel(r'./data/表单3/表单3.xlsx')
    testers_df = testers_df[testers_df['表面风化']=='风化']  # 仅处理表面风化的未知样本
    candidates = candidates_df.iloc[:, :-4]
    testers = testers_df.iloc[:, 2:-5]
    # 循环判断相似度
    for i in range(testers.shape[0]):
        tester = testers.iloc[i, :]
        similarity_lis = []
        for j in range(candidates.shape[0]):
            similarity = get_p_value(tester, candidates.iloc[j,:])
            similarity_lis.append(similarity[0])
        r_max = max(similarity_lis)   #找到最大相似度
        print("风化组第{}个测试者对应高相似度的候选者是第{}个,相关系数r为{} ".format(i+1, similarity_lis.index(r_max)+1, r_max))

# 计算两列数据的p值
def get_p_value(arrA, arrB):
    r = stats.pearsonr(arrA,arrB)  #输出的第一个值为相关系数；第二个值为p值，该值越小表明相关系数越显著
    return r

if __name__ == '__main__':
    get_similarity()

